【原理】CAM(类激活映射)模型可视化

您所在的位置:网站首页 cam 可视化 【原理】CAM(类激活映射)模型可视化

【原理】CAM(类激活映射)模型可视化

2023-12-15 03:17| 来源: 网络整理| 查看: 265

前言

深度学习如火如荼,神经网络的可解释性一直是讨论的热点,其实可解释性常和模型的可视化联系在一起,模型可视化或者模型可解释说到是对某一类别具有可解释性,直接画出来特征图并不能说明模型学到了某种特征。这里主要讲一下基于类激活映射(Class Activation Mapping)的可视化。这个技术其实提出时间比较早,但是效果较好,如果希望做模型可视化,推荐大家研究一下,近期我也是用到了这个模型可视化,所以这里主要先针对原理进行简要的阐述,希望可以加深自己的认识。

可视化方法

其实可视化有很多方法: 1 直接可视化:最容易被想到的一种方式就是对特征图进行可视化,想法是对的,直接对 feature map 进行粗暴的 resize,或者更为精细点的操作是进行反卷积,将 feature map 放大至和原图一样的大小,但是这样智能算是特征图的可视化,并非模型的可视化,模型的可视化要求其对分类有一定的解释性或者说依据,而且特征图可视化,由于特征图的通道数比较多且复杂,不同的特征图学习到的特征是不一样的,我们如果只对特征图进行可视化,检查的时间比较长,你要人眼遍历所有可视化的结果,所以比较麻烦。 2 反卷积(Deconvolution):能够一定程度上“看到”CNN模型中较深的卷积层所学习到的一些特征,当然,目前此技术在分割领域经常用到,利用反卷积进行可视化,其实重要的部分是最大池化,池化操作通过成倍的缩小feature maps的尺寸(高、宽),使得一个特征可覆盖的原图的范围(感受野Receptive Field)成倍的增大,这样高层的特征可以更快地表征图片的宏观信息。而将卷积操作的步幅(stride)设置为大于1的值,理论上可以获得与池化操作相同的效果,但是在反卷积可视化时,需要用到最大池化的索引,由于不同图片的池化索引各不相同,这样,即使是相同位置的特征通过反卷积网络后,可视化结果也完全不同(池化索引相当于给了不同图片独特的身份标识)。如果去掉池化层,图片的身份标识没有了,自然无法生成与原图对应的可视化结构。 3导向反向传播(Guided-backpropagation):这个主要是解决网络中没有池化层的可视化,就是通过反向传播,计算该特征值相对于该输入图片的梯度。反向传播和反卷积最大的不同,就是数值通过通过ReLU时计算方式的不同。而导向反向传播可视化方法,是两者的结合。导向反向传播(Guided-Backpropagation)相当于对普通的反向传播加了指导,限制了小于0的梯度的回传,而梯度小于0的部分对应了原图中 削弱了我们想要可视化的特征 的部分,这些部分正是我们不想要的。还记得我们的目标吗,找出最大化激活某个特征的图片部分。 下图是在解释三者的不同: 在这里插入图片描述在这里插入图片描述 使用普通的反向传播得到的图像噪声较多,基本看不出模型的学到了什么东西。使用反卷积可以大概看清楚猫和狗的轮廓,但是有大量噪声在物体以外的位置上。导向反向传播基本上没有噪声,特征很明显的集中猫和狗的身体部位上。 下面讲一下CAM可视化

CAM可视化

对一个深层的卷积神经网络而言,通过多次卷积和池化以后,它的最后一层卷积层包含了最丰富的空间和语义信息,再往下就是全连接层和softmax层了,其中所包含的信息都是人类难以理解的,很难以可视化的方式展示出来。所以说,要让卷积神经网络的对其分类结果给出一个合理解释,必须要充分利用好最后一个卷积层。 在这里插入图片描述 CAM借鉴了很著名的论文Network in Network(https://arxiv.org/abs/1312.4400)_中的思路,利用GAP(Global Average Pooling)替换掉了全连接层。可以把GAP视为一个特殊的average pool层,只不过其pool size和整个特征图一样大,其实说白了就是求每张特征图所有像素的均值。 在这里插入图片描述 GAP的优点在NIN的论文中说的很明确了:由于没有了全连接层,输入就不用固定大小了,因此可支持任意大小的输入;此外,引入GAP更充分的利用了空间信息,且没有了全连接层的各种参数,鲁棒性强,也不容易产生过拟合;还有很重要的一点是,在最后的 mlpconv层(也就是最后一层卷积层)强制生成了和目标类别数量一致的特征图,经过GAP以后再通过softmax层得到结果,这样做就给每个特征图赋予了很明确的意义,也就是categories confidence maps。 在这里插入图片描述 从图中可以看到,经过GAP之后,我们得到了最后一个卷积层每个特征图的均值,通过加权和得到输出(实际中是softmax层的输入)。需要注意的是,对每一个类别C,每个特征图k的均值都有一个对应的,记为。CAM的基本结构就是这样了,下面就是和普通的CNN模型一样训练就可以了。训练完成后才是重头戏:我们如何得到一个用于解释分类结果的热力图呢?其实非常简单,比如说我们要解释为什么分类的结果是羊驼,我们把羊驼这个类别对应的所有取出来,求出它们与自己对应的特征图的加权和即可。由于这个结果的大小和特征图是一致的,我们需要对它进行上采样,叠加到原图上去,如下所示。 在这里插入图片描述

Grad-CAM可视化

CAM的解释效果已经很不错了,但是它有一个致使伤,就是它要求修改原模型的结构,导致需要重新训练该模型,这大大限制了它的使用场景。如果模型已经上线了,或着训练的成本非常高,我们几乎是不可能为了它重新训练的。于是乎,Grad-CAM横空出世,解决了这个问题。 Grad-CAM使用流入CNN最后一层卷积层的梯度信息来理解每个神经元对于目标决定的重要性。 在这里插入图片描述 给定一个图像和一个目标类(例如,'虎猫’或任何其他类型的可微分输出)作为输入,我们将图像传播通过模型的CNN部分,然后通过特定任务的计算来获得该类别的原始分数。对于所有类,除了所需的类(虎猫)的梯度设置为1,其余的梯度设置为零。然后将该信号反向传播到所关注的整形卷积特征图,其中我们结合起来计算粗糙的Grad-CAM定位(蓝色热力图),它表明了模型需要看哪里去做出精确决定。最后,我们将热力图与导向反向传播逐点相乘,获得高分辨率和特定概念的Guided Grad-CAM可视化。注意这里和CAM的另一个区别是,Grad-CAM对最终的加权和加了一个ReLU,加这么一层ReLU的原因在于我们只关心对类别c有正影响的那些像素点,如果不加ReLU层,最终可能会带入一些属于其它类别的像素,从而影响解释的效果 在这里插入图片描述

Grad-CAM++可视化

GradCAM++ vs GradCAM 优点 1 定位更准确 2 更适合同类多目标的情况 在这里插入图片描述

文献:

【1】Learning Deep Features for Discriminative Localization 【2】Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization 【3】Grad-CAM++: Generalized Gradient-based Visual Explanations for Deep Convolutional Networks

参考

【1】点击 【2】【论文翻译】Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization ICCV 2017 【3】2019-09-03 Grad-CAM++ 原理及实现 【4】专栏



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3